﻿using EGuayas.Web.Resources;
using EntGuayasSLA.BL;
using EntGuayasSLA.BL.Archivos.Pdf;
using EntGuayasSLA.BL.Listas;
using EntGuayasSLA.BL.Listas.Criterias;
using Ext.Net;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.IO;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace EGuayas.Web.EGlobal.jefaud
{
    public partial class pgOficios : pgBase
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }
        [DirectMethod]
        public OficiosLista BindDataEnviados()
        {
            try
            {


                return OficiosLista.GetOficiosLista(Valores.Codigo_CHAR_Si);
            }
            catch (Exception ex)
            {
                RegistrarLog(ex);
            }
            return null;
        }
        [DirectMethod]
        public OficiosLista BindDataProcesos()
        {
            try
            {
                return OficiosLista.GetOficiosLista(Valores.Codigo_CHAR_Revizar);
            }
            catch (Exception ex)
            {
                RegistrarLog(ex);
            }
            return null;
        }
        [DirectMethod]
        public OficiosLista BindDataDevueltos()
        {
            try
            {
                return OficiosLista.GetOficiosLista(Valores.Codigo_CHAR_No);
            }
            catch (Exception ex)
            {
                RegistrarLog(ex);
            }
            return null;
        }
        [DirectMethod]
        public static string GetSubDoc(Dictionary<string, string> parameters)
        {
            ArchivoSubArchivosCriteria criteria = ArchivoSubArchivosCriteria.NewArchivoSubArchivosCriteria();
            criteria.Id = parameters["id"];
            criteria.Tabla ="";

            var data = ArchivoLista.GetArchivoLista(criteria);


            if (data.Count != 0)
            {

                GridPanel grid = new GridPanel
                {
                    Height = 90,
                    EnableColumnHide = false,
                    Store = 
            { 
                new Store 
                { 
                    Model = {
                        new Model {
                            IDProperty = "Id",
                            Fields = 
                            {
                                new ModelField("Id"),
                                new ModelField("Nombre"),
                                new ModelField("Descripcion"),
                                new ModelField("FechaCreacion"),
                                new ModelField("Version"),
                                new ModelField("Ruta")
                            }
                        }
                    },
                    DataSource = data
                }
            },
                    ColumnModel =
                    {
                        Columns = { }
                    },

                };


                Column addColumn1 = new Column();
                addColumn1.Text = "Nombre";
                addColumn1.DataIndex = "Nombre";
                addColumn1.Flex = 4;
                grid.ColumnModel.Columns.Add(addColumn1);

                Column addColumn2 = new Column();
                addColumn2.Text = "Descripción";
                addColumn2.DataIndex = "Descripcion";
                addColumn2.Flex = 4;
                grid.ColumnModel.Columns.Add(addColumn2);

                Column addColumn3 = new Column();
                addColumn3.Text = "Fecha";
                addColumn3.DataIndex = "FechaCreacion";
                addColumn3.Flex = 4;
                grid.ColumnModel.Columns.Add(addColumn3);

                Column addColumn4 = new Column();
                addColumn4.Text = "Versión";
                addColumn4.DataIndex = "Version";
                addColumn4.Flex = 4;
                grid.ColumnModel.Columns.Add(addColumn4);

                CommandColumn commandColumn = new CommandColumn();
                commandColumn.ID = "colAction" + System.Guid.NewGuid();
                commandColumn.Flex = 1;
                //commandColumn.Text = "Visualizar";
                commandColumn.DataIndex = "Id";
                commandColumn.Commands.Add(new GridCommand { Icon = Ext.Net.Icon.Zoom, CommandName = "View", Text = "Vizualizar" });
                commandColumn.Listeners.Command.Handler = "AppGlobalJs.showPdf('../../..',record.data.Ruta);";
                grid.ColumnModel.Columns.Add(commandColumn);
                return ComponentLoader.ToConfig(grid);
            }
            return null;
        }
   
        protected void btnAceptar_Click(object sender, DirectEventArgs e)
        {
            newOrUpdateOficio(e);

        }

        private void newOrUpdateOficio(DirectEventArgs e)
        {
            try
            {

                //"Uploaded file: {0}<br/>Size: {1} bytes"
                Archivo objArch = Archivo.NewEditableRoot("");
                FileUploadField myCtlFileUp = null;
                string IdUPField = e.ExtraParams["IdUPField"];
                myCtlFileUp = (FileUploadField)this.FindControl(IdUPField);

                if (myCtlFileUp.HasFile)
                {


                    int version = 0;
                    string fileExt = myCtlFileUp.PostedFile.FileName.Substring(myCtlFileUp.PostedFile.FileName.LastIndexOf('.') + 1);
                    string ruta = "";
                    string fileName = "";
                    string fileNameTmp = "";

                    Int32.TryParse(e.ExtraParams["hddnDocUpVers"], out version);
                    version = version + 1;
                    this.GetNameFile(myCtlFileUp, fileExt, ref ruta, ref fileName, ref fileNameTmp);
                   

                    byte[] USER = Encoding.UTF8.GetBytes(ConfigurationManager.AppSettings.Get("UserPdf"));
                    byte[] OWNER = Encoding.UTF8.GetBytes(ConfigurationManager.AppSettings.Get("PwdPdf"));

                    if (fileExt.ToLower() == "pdf")
                    {
                        myCtlFileUp.PostedFile.SaveAs(fileNameTmp);
                        Pdf.EncryptFilePdf(fileNameTmp, fileName, USER, OWNER);
                        File.Delete(fileNameTmp);
                    }
                    else
                    {
                        myCtlFileUp.PostedFile.SaveAs(fileName);
                    }

                    objArch.Id = System.Guid.NewGuid();
                    objArch.SubirNuevo = "C";
                    if (version == 1)
                    {
                        objArch.SubirNuevo = "N";
                        objArch.Referencia = objArch.Id.ToString();

                    }
                    else
                    {
                        Archivo objArchAnterior = null;
                        if (version > 2)
                        {
                            objArch.Referencia = e.ExtraParams["hddnDocUpRef"];
                        }
                        else
                        {
                            if (version == 2)
                            {

                                objArch.Referencia = e.ExtraParams["hddnDocUpId"];
                                objArchAnterior = Archivo.GetEditableRoot(Guid.Parse(objArch.Referencia), Valores.Modulo_Archivo_Licenciamiento);
                                if (objArchAnterior.Referencia == "")
                                {
                                    objArchAnterior.Referencia = objArchAnterior.Id.ToString();
                                    objArchAnterior.Save();
                                }

                            }
                        }
                    }

                    objArch.Nombre = e.ExtraParams["txtNombre"];
                    objArch.Descripcion = e.ExtraParams["txtDesp"];
                    objArch.FechaCreacion = DateTime.Now;
                    objArch.RequiereFirmar = Valores.Codigo_CHAR_No;
                    objArch.Firmado = Valores.Codigo_CHAR_No;


                    objArch.Version = version;
                    objArch.RequiereFirmar = Valores.Codigo_CHAR_No;

                    objArch.PersonaId = GetSessionUsuario.PersonaId;

                    objArch.Ruta = ruta;

                    objArch.Save();


                }
                Oficio objOficio = null;
                if (e.ExtraParams["Id"] == "")
                {
                    objOficio = Oficio.NewEditableRoot();
                    objOficio.Id = System.Guid.NewGuid();
                    objOficio.Numero = e.ExtraParams["txtNumero"];
                    objOficio.Descripcion = e.ExtraParams["txtDesp"];
                    objOficio.Correo = e.ExtraParams["Correo"];
                    objOficio.PersonaId = GetSessionUsuario.PersonaId;
                    objOficio.ArchivoId = objArch.Id.ToString();
                    objOficio.Estado = Valores.Codigo_CHAR_Revizar;
                    objOficio.Save();
                }
                else
                {
                    objOficio = Oficio.GetEditableRoot(Guid.Parse(e.ExtraParams["Id"]));
                    objOficio.ArchivoId = objArch.Id.ToString();
                    objOficio.Estado = Valores.Codigo_CHAR_Revizar;
                    objOficio.Save();
                }
                gpDocumentosLoad.GetStore().Reload();
                gpEnviados.GetStore().Reload();
                if (IdUPField == "FileUploadDocUp")
                {
                    this.winProceso.Close();
                    X.Msg.Show(new MessageBoxConfig
                    {
                        Buttons = MessageBox.Button.OK,
                        Icon = MessageBox.Icon.INFO,
                        Title = Titulos.TituloAviso,
                        Message = "Oficio creado"
                    });
                }
                else
                {
                    this.winAprobar.Close();
                    X.Msg.Show(new MessageBoxConfig
                    {
                        Buttons = MessageBox.Button.OK,
                        Icon = MessageBox.Icon.INFO,
                        Title = Titulos.TituloAviso,
                        Message = "Nueva versión de Oficio creado"
                    });
                }
            }
            catch (Exception ex)
            {
                RegistrarLog(ex);
            }
        }

    }
}